﻿using System.Xml.Linq;

namespace Sidvall.Xml
{
    public static class XElementExtension
    {
        #region Public Members

        #region GetAttribute

        public static XAttribute GetAttribute(this XElement item, string attributeName)
        {
            if (item == null)
                return null;
            return item.Attribute(attributeName);
        }
        public static XAttribute GetAttribute(this XElement item, string attributeName, string elementName)
        {
            item = item.GetElement(elementName);
            if (item == null)
                return null;
            return item.Attribute(attributeName);
        }
        public static XAttribute GetAttribute(this XElement item, string attributeName, string[] elementNames)
        {
            item = item.GetElement(elementNames);
            if (item == null)
                return null;
            return item.Attribute(attributeName);
        }

        #endregion
        #region GetAttributeValue

        public static string GetAttributeValue(this XElement item, string attributeName)
        {
            XAttribute attribute;

            attribute = GetAttribute(item, attributeName);
            if (attribute == null)
                return null;
            return attribute.Value;
        }

        public static string GetAttributeValue(this XElement item, string attributeName, string elementName)
        {
            XAttribute attribute;

            attribute = GetAttribute(item, attributeName, elementName);
            if (attribute == null)
                return null;
            return attribute.Value;
        }

        public static string GetAttributeValue(this XElement item, string attributeName, string[] elementNames)
        {
            XAttribute attribute;

            attribute = GetAttribute(item, attributeName, elementNames);
            if (attribute == null)
                return null;
            return attribute.Value;
        }

        #endregion
        #region GetElementValue

        public static string GetElementValue(this XElement item)
        {
            if (item == null)
                return null;
            return item.Value;
        }

        public static string GetElementValue(this XElement item, string elementName)
        {
            item = item.GetElement(elementName);
            if (item == null)
                return null;
            return item.Value;
        }

        public static string GetElementValue(this XElement item, string[] elementNames)
        {
            item = item.GetElement(elementNames);
            if (item == null)
                return null;
            return item.Value;
        }

        #endregion
        #region GetFirstDescendantValue

        public static string GetFirstDescendantValue(this XElement item)
        {
            return GetFirstDescendantValue(item, null);
        }
        public static string GetFirstDescendantValue(this XElement item, string elementName)
        {
            item = item.GetFirstDescendant(elementName);
            if (item == null)
                return null;
            return item.Value;
        }

        #endregion

        #endregion
    }
}
